package com.utils.catche;

import java.util.Set;

import org.springframework.cache.Cache;

public interface CacheSupport extends Cache {
	/**
     * 存入缓存对象
     * @param key
     * @param value
     */
    void put(String key, Object value);

    /**
     * 存入缓存对象，带过期时间（闲置时间）
     * @param key
     * @param value
     * @param timeToIdle
     */
    void put(String key, Object value, int timeToIdle);

    /**
     * 获取缓存对象
     * @param key
     * @return
     */
    Object get(String key);

    /**
     * 获取缓存对象并更新过期时间
     * @param key
     * @param timeToIdle
     * @return
     */
    Object get(String key, int timeToIdle);


    /**
     * 移除缓存
     * @param key
     */
    void remove(String... keys);

    /**
     * 判断缓存是否存在
     * @param key
     * @return
     */
    boolean hasKey(String key);


    //以下为兼容Redis的API，针对Redis效率应该更高些
    //仅添加暂时用到的，主要是Set和Map会单独访问，List一般全量读取，可以按对象存储

    /**
     * 在Set中添加数据
     * @param key
     * @param value
     */
    void putSet(String key, String... values);

    /**
     * 判断value在Set中存在
     * @param key
     * @param value
     * @return
     */
    boolean isKeyInSet(String key, String... values);

    /**
     * 获取Set数据
     * @param key
     * @return
     */
    Set<String> getSet(String key);

    /**
     * 从Set中删除值
     * @param key
     * @param value
     */
    void removeSetValue(String key, String... values);

    /**
     * 在Map中添加数据(字符串)
     * @param key
     * @param field
     * @param value
     */
    void putMap(String key, String field, String value);

    /**
     * 获取map中的值
     * @param key
     * @param field
     * @return
     */
    String getMapValue(String key, String field);


    /**
     * 从Map中删除字段
     * @param key
     * @param field
     */
    void removeMapField(String key, String field);
}
